package model;

import java.util.ArrayList;
import java.util.Collection;




import persistencia.AdministradorPersistenciaFactura;



public class Factura {
	
	
	private int numero;
	private String cliente;
	private Collection<ItemFactura> items;
//	private static int _numero = 0;  /* GENERA NUMERO DE FACTURA AUTOMATICAMENTE */
	
	public Factura(String cliente){
		super();
		//_numero ++; /* INCREMENTA EL NUMERO DE FACTURA AUTOMATICAMENTE */
		//this.numero = _numero;
		this.cliente = cliente;
		this.numero= getUltimoNumero()+1;
		this.items= new ArrayList<ItemFactura>();
		//this.items = AdministradorPersistenciaFactura.getInstancia().selectItems(numero);
	}
	
	//PARA CREAR OBJETO FACTURA CUANDO TRAIGO DE LA BASE
	public Factura(int nroFactura, String cliente) {
		super();
		this.numero= nroFactura;
		this.cliente=cliente;
		this.items = AdministradorPersistenciaFactura.getInstancia().selectItems(numero);
	}
	
	/* AGREGA ITEM A LA FACTURA */


	private int getUltimoNumero() {
		return AdministradorPersistenciaFactura.getInstancia().getUltimoNumero();
	}

	public boolean agregarItem(Producto producto, int cantidad){
		if(producto.alcanzaStock(cantidad)){
			ItemFactura item = new ItemFactura(producto, cantidad);
			//AdministradorPersistenciaFactura.getInstancia().insertItemFactura(this.numero, producto, cantidad);
			items.add(item);
			return true;
		}
		return false;
	}
	
	/* VERIFICA QUE SEA LA FACTURA */
	
	public boolean sosLaFactura(int numero){
		return this.numero == numero;
	}

	/* CALCULA EL TOTAL DE LA FACTURA */
	
	public float calcularTotal(){
		float total = 0;
		for(ItemFactura item : items){
			total = total + item.calcularSubtotal();
		}
		return total;
	}

	

	
	/* guarda factura en la base, con sus items, y descuenta el stock*/
	
	public void cerrarFactura(){
		
		AdministradorPersistenciaFactura.getInstancia().insertFactura(this.numero, this.cliente);
				
		for(ItemFactura item:items){
			item.actualizarStock();
			item.persistirItem(this.getNumero());
		}
	}
	

	/* DEVUELVE EL NUMERO DE FACTURA */
	
	public int getNumero() {
		return numero;
	}
	
	/* DEVUELVE EL CLIENTE DE LA FACTURA */
	
	public String getCliente() {
		return cliente;
	}

	
	
}
